﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BLL;
using DTO;
using System.Data;
using System.IO;

namespace GUI.Admin.uc
{
    public partial class Ad_NhaSanXuatUC : System.Web.UI.UserControl
    {
        #region Khai báo
        private NhaSanXuatBLL _nsxBLL;
        private NhaSanXuatDTO _nsxDTO;
        private List<NhaSanXuatDTO> _lst;
        private CommonBLL _cmBLL;
        #endregion

        #region Page_Load
        protected void Page_Load(object sender, EventArgs e)
        {
            /*
                 * Khi Form load thì thực hiện các thao tác sau:
                 * 1. Hiển thị Panel danh sách nhà sản xuất           
                 * 2. Ẩn Panel thêm, sửa thông tin nhà sản xuất           
                 * 3. Load dữ liệu vào Gridview
                 * 4. Hiển thị tổng số nhà sản xuất vào Label
                 */
            if (!IsPostBack)
            {
                try
                {
                    // Load data vào gridview
                    this.LoadDuLieu();
                }
                catch (Exception ex)
                {
                    Response.Redirect("../ErrorMessage.aspx?err=" + ex.Message + " ");
                }
            }
        }
        #endregion

        #region Phương thức hiển thị danh sách nhà sản xuất vào gridview
        /// <summary>
        /// Phương thức hiển thị danh sách nhà sản xuất vào gridview
        /// </summary>
        private void LoadDuLieu()
        {
            _nsxBLL = new NhaSanXuatBLL();
            _lst = new List<NhaSanXuatDTO>();

            try
            {
                this.PanelDanhSachNhaSanXuat.Visible = true;
                this.PanelThemSuaNhaSanXuat.Visible = false;

                _lst = _nsxBLL.GetListNhaSanXuat();
                GridViewNhaSanXuat.DataSource = _lst;
                GridViewNhaSanXuat.DataBind();

                // Hiển thị tổng số nhà sản xuất vào Label
                int d = _lst.Count;
                this.LabelTongSoNhaSanXuat.Text = Convert.ToString(d);
                if (d == 0)
                {
                    this.LabelThongBao.Text = "Chưa có nhà sản xuất nào !";
                    this.LabelThongBao.Visible = true;
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        #endregion

        #region btnLuu_Click
        protected void btnLuu_Click(object sender, EventArgs e)
        {
            try
            {
                string _filename = ""; //this.HiddenFieldTenHinh.Value;

                if (FileUpLoadHinhAnh.HasFile)
                {
                    _filename = this.FileUpLoadHinhAnh.FileName;
                    // Kiểm tra việc nhập file đúng kích thước <= 3MB                        

                    if (this.FileUpLoadHinhAnh.PostedFile.ContentLength > 3145728)
                    {
                        this.LabelFileSize.Text = "(*) Kích cỡ ảnh vượt quá 3MB.";
                        return;
                    }

                    // Đổi tên file trước khi lưu
                    string[] strArray = _filename.Split('.');

                    // Tên ảnh                                                        
                    string name = strArray[0];

                    // Lấy ngày giờ hiện tại
                    //string dt = DateTime.Now.ToString();
                    string dt = "";

                    // Ngày
                    dt += DateTime.Now.Day.ToString();

                    // Tháng
                    dt += DateTime.Now.Month.ToString();

                    // Năm
                    dt += DateTime.Now.Year.ToString();

                    // Giờ 
                    dt += DateTime.Now.Hour.ToString();

                    // Phút 
                    dt += DateTime.Now.Minute.ToString();

                    // Giây
                    dt += DateTime.Now.Second.ToString();

                    name += dt;

                    // Đuôi ảnh
                    string tail = strArray[1];

                    // Gán trở lại _filename
                    _filename = name + "." + tail;
                }

                _nsxBLL = new NhaSanXuatBLL();

                // Object sản phẩm
                _nsxDTO = new NhaSanXuatDTO();

                _nsxDTO.MaNhaSanXuat = this.LabelMaNhaSanXuat.Text;
                _nsxDTO.TenNhaSanXuat = this.TextBoxTenNhaSanXuat.Text;

                // Trường hợp ko có file ảnh cũ (Thêm  _nsx mới)
                // Nếu _filename != "" thì
                // Lưu tên file ảnh mới vào database
                // else thì lưu vào database tên file ảnh là default

                // Trường hợp có file ảnh cũ
                //  1. Nếu là file ảnh mặc định && _filename == "" thì
                // Cập nhật tên file ảnh trong database vẫn là file default
                //  2. Nếu là file ảnh mặc định && _filename != "" thì
                // Cập nhật tên file ảnh trong database là tên mới
                //  3. Nếu file ảnh ko là file mặc định && _filename == "" thì
                // Cập nhật tên file ảnh trong database vẫn là tên file cũ
                //  4. Nếu file ảnh ko là file mặc định && _filename != "" thì 
                // Cập nhật tên file ảnh trong database là tên file mới

                string _oldfile = this.HiddenFieldTenHinh.Value;
                if (_oldfile == "")
                {
                    if (_filename != "")
                        _nsxDTO.Logo = _filename;
                    else
                        _nsxDTO.Logo = "product_default_large.jpg";
                }
                else
                {
                    if (_oldfile == "product_default_large.jpg" && _filename == "")
                        _nsxDTO.Logo = "product_default_large.jpg";
                    else if (_oldfile == "product_default_large.jpg" && _filename != "")
                        _nsxDTO.Logo = _filename;
                    else if (_oldfile != "product_default_large.jpg" && _filename == "")
                        _nsxDTO.Logo = _oldfile;
                    else
                        _nsxDTO.Logo = _filename;
                }

                _nsxDTO.DiaChi = this.TextBoxDiaChi.Text;
                _nsxDTO.DienThoai = this.TextBoxDienThoai.Text;
                _nsxDTO.Fax = this.TextBoxFax.Text;
                _nsxDTO.URL = this.TextBoxWebsite.Text;

                // Lưu thông tin xuống CSDL

                // Trường hợp thêm mới
                if (this.ButtonLuu.Text.Equals("Lưu"))
                {
                    if (_nsxBLL.Them(_nsxDTO) != -1)
                    {
                        Page.ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('Thêm mới thành công');", true);
                        // Xóa text trong textbox
                        this.XoaText();

                        // Hiển thị Panel danh sách
                        this.PanelDanhSachNhaSanXuat.Visible = true;

                        // Ẩn Panel Thêm, sửa sản phẩm
                        this.PanelThemSuaNhaSanXuat.Visible = false;

                        if (_filename != "")
                        {
                            // Lưu hình vào thư mục hình - 1 file hình = tên file hình + đuôi file                        
                            FileUpLoadHinhAnh.SaveAs(Server.MapPath("../Images\\") + _filename);
                        }

                        // Load data vào gridview
                        this.LoadDuLieu();
                    }
                    else
                    {
                        Page.ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('Thêm mới không thành công. Xin kiểm tra lại thông tin');", true);
                        this.TextBoxTenNhaSanXuat.Focus();
                    }

                    return;
                }

                // Trường hợp cập nhật
                if (this.ButtonLuu.Text.Equals("Cập nhật"))
                {
                    // Lấy cái mã hình để cập nhật hình ảnh
                    //haDTO.MaHinhAnh = Convert.ToInt32(this.HiddenFieldMaHinh.Value);

                    // Lưu thông tin xuống CSDL

                    if (_nsxBLL.Sua(_nsxDTO) != -1)
                    {
                        Page.ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('Cập nhật thành công');", true);
                        // Hiển thị Panel danh sách
                        this.PanelDanhSachNhaSanXuat.Visible = true;

                        // Ẩn Panel thêm, sửa
                        this.PanelThemSuaNhaSanXuat.Visible = false;

                        // 1. Trường hợp file ảnh cũ != file default và file mới != null --> Xóa file cũ, lưu file mới
                        // Trường hợp file ảnh cũ ko phải file mặc định --> Thì xóa file cũ, lưu file mới
                        if (_oldfile != "product_default_large.jpg" && _filename != "")
                        {
                            // Xóa luôn file ảnh cũ trong thư mục ảnh
                            this.DeleteFile(Server.MapPath("../Images\\") + _filename);

                            // Lưu file ảnh mới
                            FileUpLoadHinhAnh.SaveAs(Server.MapPath("../Images\\") + _filename);
                        }
                        // 2. Trường hợp file ảnh cũ == file default và file mới != null --> ko xóa file cũ, lưu file mới
                        if (_oldfile == "product_default_large.jpg" && _filename != "")
                        {
                            // Lưu file ảnh mới
                            FileUpLoadHinhAnh.SaveAs(Server.MapPath("../Images\\") + _filename);
                        }

                        // Load lại Gridview
                        this.LoadDuLieu();
                    }
                    else
                    {
                        Page.ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('Cập nhật không thành công. Xin kiểm tra lại thông tin');", true);
                        this.TextBoxTenNhaSanXuat.Focus();
                    }

                }

            }
            catch (Exception ex)
            {
                Response.Redirect("../ErrorMessage.aspx?err=" + ex.Message + " ");
            }

        }
        #endregion

        #region Phương thức xóa một file trong 1 thư mục
        /// <summary>
        /// Phương thức xóa một file trong 1 thư mục
        /// </summary>
        /// <param name="fileName">filename</param>
        private void DeleteFile(string filename)
        {
            try
            {
                FileInfo _fi;
                if (System.IO.File.Exists(filename) == true)
                {
                    _fi = new FileInfo(filename);
                    _fi.Delete();
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        #endregion

        #region btnNhaplai_Click
        protected void btnNhaplai_Click(object sender, EventArgs e)
        {
            this.XoaText();
        }
        #endregion

        #region Phương thức xóa textbox
        /// <summary>
        /// Phương thức xóa textbox
        /// </summary>
        private void XoaText()
        {
            this.TextBoxTenNhaSanXuat.Text = "";
            this.TextBoxDiaChi.Text = "";
            this.TextBoxDienThoai.Text = "";
            this.TextBoxFax.Text = "";
            this.TextBoxWebsite.Text = "";

        }
        #endregion

        #region ImageButtonThemMoi_Click
        protected void ImageButtonThemMoi_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                // Ẩn Panel danh sách
                this.PanelDanhSachNhaSanXuat.Visible = false;

                // Hiển thị Panel thêm mới
                this.PanelThemSuaNhaSanXuat.Visible = true;

                // Xóa text trong textbox
                this.XoaText();

                // Tạo mã số tự động
                TaoMaSoTuDongBLL _mstd = new TaoMaSoTuDongBLL();
                try
                {
                    string _ms = _mstd.TaoMaTuDong("NhaSanXuat");
                    this.LabelMaNhaSanXuat.Text = _ms;

                    // Lệnh thục hiện: Thêm mới
                    this.ButtonLuu.Text = "Lưu";
                }
                catch (Exception ex)
                {
                    Response.Redirect("../ErrorMessage.aspx?err=" + ex.Message + " ");
                }

                // Lệnh thục hiện: Thêm mới
                this.ButtonLuu.Text = "Lưu";
            }
            catch (Exception ex)
            {
                Response.Redirect("../ErrorMessage.aspx?err=" + ex.Message + " ");
            }
        }
        #endregion

        #region Phương thức load Dropdownlist
        /// <summary>
        /// Phương thức load Dropdownlist
        /// </summary>
        /// <param name="drop">DropDownList Name</param>
        /// <param name="tableName">TableName in database</param>
        private void AddDropDownList(DropDownList drop, string tablename)
        {
            string _strDisplay = "";
            string _strValue = "";

            _strDisplay = "Ten" + tablename;
            _strValue = "Ma" + tablename;

            try
            {
                _cmBLL = new CommonBLL();
                DataTable dt = new DataTable();
                dt = _cmBLL.getDataSet(tablename).Tables[0];

                drop.Items.Add("Default");
                foreach (DataRow rw in dt.Rows)   //Duyệt từng dòng trong Table
                {
                    ListItem litem = new ListItem(rw[_strDisplay].ToString(), rw[_strValue].ToString());
                    drop.Items.Add(litem);
                }
                drop.DataBind();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        #endregion

        #region ImageButtonXoa_Click
        protected void ImageButtonXoa_Click(object sender, ImageClickEventArgs e)
        {
            _nsxBLL = new NhaSanXuatBLL();
            try
            {
                int _flag = 0;
                // Khi button xóa được click:
                // Lấy danh sách mã nhà sản xuất từ List<>
                // Loop từng mã nhà sản xuất và xóa

                _lst = new List<NhaSanXuatDTO>();
                int _n = GridViewNhaSanXuat.Rows.Count;
                for (int i = 0; i < _n; i++)
                {
                    _nsxDTO = new NhaSanXuatDTO();
                    GridViewRow _gvr = GridViewNhaSanXuat.Rows[i];
                    bool _ischecked = ((CheckBox)_gvr.Cells[0].FindControl("CheckBoxItem")).Checked;
                    if (_ischecked == true) // Dòng đó được check
                    {
                        _flag = 1; // Xác nhận checkbox có check
                        // Tìm mã nhà sản xuất
                        Label _mansx = (Label)_gvr.Cells[0].FindControl("LabelMaNhaSanXuat");

                        //_nsxDTO.MaNhaSanXuat = _mansx.Text;
                        _nsxDTO = _nsxBLL.GetNhaSanXuat(_mansx.Text);

                        // Lưu vào list
                        this._lst.Add(_nsxDTO);
                    }
                }

                if (_flag == 1)
                {
                    // Tới đây là ta đã có 1 List<int> mã nhà sản xuất
                    // Loop all, gọi hàm xóa 1 nhà sản xuất
                    _nsxBLL = new NhaSanXuatBLL();
                    string _id = "";

                    int _n2 = this._lst.Count;
                    for (int i = 0; i < _n2; i++)
                    {
                        // Xóa dữ liệu
                        _nsxBLL.Xoa(this._lst[i]);

                        // Xóa file ảnh tương ứng trong thư mục
                        string _filename = this._lst[i].Logo;
                        if (_filename != "product_default_large.jpg")
                            this.DeleteFile(Server.MapPath("../Images\\") + _filename);

                        _id += this._lst[i].MaNhaSanXuat.ToString();
                        if (i < _n2 - 1)
                        {
                            _id += ",";
                        }
                    }

                    // Thông báo cho user biết đã xóa các dòng nào

                    Page.ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('Đã xóa thành công các dòng có ID = " + _id + " ');", true);

                    // Load data vào gridview
                    this.LoadDuLieu();
                }
                else // Ko có checkbox nào được check
                {
                    // Thông báo cho user biết chưa chọn dòng nào
                    Page.ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('Bạn chưa chọn dòng nào để xóa !');", true);

                }
            }
            catch (Exception ex)
            {
                Response.Redirect("../ErrorMessage.aspx?err=" + ex.Message + " ");
            }
        }
        #endregion

        #region GridViewNhaSanXuat_PageIndexChanging
        protected void GridViewNhaSanXuat_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            try
            {
                GridViewNhaSanXuat.PageIndex = e.NewPageIndex;
                this.LoadDuLieu();
            }
            catch (Exception ex)
            {
                Response.Redirect("../ErrorMessage.aspx?err=" + ex.Message + " ");
            }
        }
        #endregion

        #region GridViewNhaSanXuat_RowDataBound
        protected void GridViewNhaSanXuat_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            try
            {
                if (e.Row.RowIndex >= 0)
                {
                    e.Row.Attributes.Add("onMouseOver", "this.style.backgroundColor='#bde2fd'");

                    if (e.Row.RowIndex % 2 == 0)
                        e.Row.Attributes.Add("onMouseOut", "this.style.backgroundColor='#EFF3FB'");
                    else
                        e.Row.Attributes.Add("onMouseOut", "this.style.backgroundColor='White'");

                }
            }
            catch (Exception ex)
            {
                Response.Redirect("../ErrorMessage.aspx?err=" + ex.Message + " ");
            }
        }
        #endregion

        #region GridViewNhaSanXuat_RowEditing
        protected void GridViewNhaSanXuat_RowEditing(object sender, GridViewEditEventArgs e)
        {
            try
            {
                _nsxBLL = new NhaSanXuatBLL();
                _nsxDTO = new NhaSanXuatDTO();
                this.XoaText();

                // Ẩn Panel danh sách
                PanelDanhSachNhaSanXuat.Visible = false;

                // Hiển thị Panel thêm, sửa nhà sản xuất
                PanelThemSuaNhaSanXuat.Visible = true;

                // Load data lên các control

                LabelTitle.Text = "Cập nhật thông tin nhà sản xuất";
                Label manhasanxuat = (Label)GridViewNhaSanXuat.Rows[e.NewEditIndex].FindControl("LabelMaNhaSanXuat");
                this.LabelMaNhaSanXuat.Text = manhasanxuat.Text;

                _nsxDTO = _nsxBLL.GetNhaSanXuat(this.LabelMaNhaSanXuat.Text);
                this.TextBoxTenNhaSanXuat.Text = _nsxDTO.TenNhaSanXuat;

                this.ImageHinhAnh.ImageUrl = "../../Images/" + _nsxDTO.Logo;
                this.ImageHinhAnh.Width = 130;
                this.ImageHinhAnh.Height = 158;

                this.HiddenFieldTenHinh.Value = _nsxDTO.Logo;
                this.ImageHinhAnh.Visible = true;
                this.TextBoxDiaChi.Text = _nsxDTO.DiaChi;
                this.TextBoxDienThoai.Text = _nsxDTO.DienThoai;
                this.TextBoxFax.Text = _nsxDTO.Fax;
                this.TextBoxWebsite.Text = _nsxDTO.URL;

                ButtonLuu.Text = "Cập nhật";
            }
            catch (Exception ex)
            {
                Response.Redirect("../ErrorMessage.aspx?err=" + ex.Message + " ");
            }
        }
        #endregion

        #region ButtonTroLai_Click
        protected void ButtonTroLai_Click(object sender, ImageClickEventArgs e)
        {
            Response.Redirect("~/Admin/NhaSanXuat.aspx");
        }
        #endregion

        #region CheckBoxItem_CheckedChanged
        protected void CheckBoxItem_CheckedChanged(object sender, EventArgs e)
        {

        }
        #endregion
    }
}